package co.edu.javeriana.konigsberg.xavier.servicio;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.ejb.Stateless;

import co.edu.javeriana.konigsberg.xavier.dao.desc.TipoProgramaDAOLocal;
import co.edu.javeriana.konigsberg.xavier.dto.TipoProgramaDTO;
import co.edu.javeriana.konigsberg.xavier.entidad.Tipoprograma;

/**
 * Session Bean implementation class TipoProgramaServicio
 */
@Stateless
public class TipoProgramaServicio implements TipoProgramaServicioRemote, TipoProgramaServicioLocal {

	@EJB
	private TipoProgramaDAOLocal tipoProgramaDAO;
	
	private static Map<BigInteger, TipoProgramaDTO> mapaTiposPrograma;
	
	private List<TipoProgramaDTO> tipoProgramaDTOs;
    /**
     * Default constructor. 
     */
    public TipoProgramaServicio() {
        // TODO Auto-generated constructor stub
    }
    
    @Override
    public List<TipoProgramaDTO> obtenerLista(){
    	if(mapaTiposPrograma == null){
    		tipoProgramaDTOs = new ArrayList<TipoProgramaDTO>();
    		mapaTiposPrograma = new HashMap<BigInteger, TipoProgramaDTO>();
    		List<Tipoprograma> tipoprogramas = tipoProgramaDAO.obtenerLista();
			for (Tipoprograma tipoprograma : tipoprogramas) {
				TipoProgramaDTO tipoProgramaDTO = getDTO(tipoprograma);
				tipoProgramaDTOs.add(tipoProgramaDTO);
				mapaTiposPrograma.put(tipoProgramaDTO.getIdTipoPrograma(), tipoProgramaDTO);
			}
    	}
		return tipoProgramaDTOs;
	}

	@Override
	public TipoProgramaDTO obtenerTipoProgramaPorId(BigInteger id) {
		if(mapaTiposPrograma == null){
			obtenerLista();
		}
		return mapaTiposPrograma.get(id);
	}

	@Override
	public TipoProgramaDTO getDTO(Object entidad) {
		Tipoprograma tipoprograma = (Tipoprograma)entidad;
		TipoProgramaDTO tipoProgramaDTO = new TipoProgramaDTO();
		tipoProgramaDTO.setIdTipoPrograma(tipoprograma.getIdTipoPrograma());
		tipoProgramaDTO.setNombreTipoPrograma(tipoprograma.getNombreTipoPrograma());
		return tipoProgramaDTO;
	}

	public List<TipoProgramaDTO> getTipoProgramaDTOs() {
		return tipoProgramaDTOs;
	}

	public void setTipoProgramaDTOs(List<TipoProgramaDTO> tipoProgramaDTOs) {
		this.tipoProgramaDTOs = tipoProgramaDTOs;
	}

}
